home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / dragfo / dragform.bas next >
BASIC Source File  |  1995-05-09  |  3KB  |  74 lines

  1. 'This code demonstrates dragging a form without a title bar
  2. 'and also dragging a textbox using similar code.
  3. '
  4. 'To drag the form the code first assigns global variables
  5. 'to the x and y coordinates of the cursor (in form coordinates)
  6. 'when the Sub Form_MouseDown event is triggered. Then as the
  7. 'Sub Form_MouseMove is triggered thereafter with the Left button
  8. 'down the global variables are subtracted from the cursor
  9. 'position as it relates to the screen and the result is the new
  10. 'x and y of the upper left corner of our form after we call
  11. 'SetWindowPos. In other words if the cursor form coordinates were
  12. 'say 50,50 at mousedown time, then as the cursor is moved
  13. 'thereafter 50 is subtracted from the cursor screen x and y
  14. 'say at first 500,500 so the (form is moved to 450,450. As you
  15. 'continue to move the mouse the upper left window position always will
  16. 'be moved to cursor screen x - 50, cursor screen y - 50.
  17. '
  18. 'The text box is similar with one difference. The Text1_Keydown
  19. 'event tracks the mouse position as it relates to the textbox when
  20. 'the Control key is down. It goes into auto dragmode until the Control
  21. 'key is released. When the mouse goes down the last coordinates are
  22. 'stored in our global variables as key and mouse events are unrecognized
  23. 'during a drag. When the dragdrop event occurs thereafter, the global
  24. 'variables are subtracted from the new coordinates as they relate
  25. 'to the form, and this is the new x and y for our textbox after the
  26. 'call to MoveWindow. This can be a little confusing but lets say
  27. 'you start to drag in the upper left (0,0) corner of the textbox..
  28. 'Then when you dropped the new x and y for the textbox would be the cursor form
  29. 'position. So, if you started the drag a little inside the textbox
  30. 'the difference from that location and 0,0 are subtracted out.
  31. 'That's it.
  32. '
  33. 'The call to GetWindowRect was just to avoid a twips to pixel conversion
  34. 'for the MoveWindow call.
  35. '
  36. 'Contributed by Jeff Simms, 72200,3173
  37. 'COMING SOON: An enhanced version of my APIX program, look for it!
  38.  
  39.  
  40. DefInt A-Z
  41.  
  42. Type POINTAPI
  43.    X As Integer
  44.    Y As Integer
  45. End Type
  46.  
  47. Type RECT
  48.   Left As Integer
  49.   Top As Integer
  50.   Right As Integer
  51.   Bottom As Integer
  52. End Type
  53.  
  54. Declare Sub GetCursorPos Lib "User" (lpPoint As POINTAPI)
  55. Declare Sub GetWindowRect Lib "User" (ByVal hWnd As Integer, lpRect As RECT)
  56. Declare Sub MoveWindow Lib "User" (ByVal hWnd As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Integer)
  57. Declare Sub ScreenToClient Lib "User" (ByVal hWnd As Integer, lpPoint As POINTAPI)
  58. Declare Sub SetWindowPos Lib "User" (ByVal hWnd As Integer, ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer)
  59. Declare Function GetFocus Lib "User" () As Integer
  60.  
  61. Global Const SWP_NOSIZE = &H1
  62. Global Const TRUE = -1
  63. Global Const FALSE = 0
  64. Global Const Left_Button = 1
  65. Global CurPos As POINTAPI
  66. Global TextBoxRect As RECT
  67. Global MyPosX As Integer
  68. Global MyPosY As Integer
  69. Global TBhWnd As Integer
  70.  
  71.  
  72.  
  73.  
  74.